iT邦幫忙

2022 iThome 鐵人賽

DAY 14
0
Modern Web

mitmproxy 在網路爬蟲上的各種應用系列 第 14

Day 14 SSL Pinning,與中間人攻擊抗衡的機制

  • 分享至 

  • xImage
  •  

一般情況下的 HTTPS 連線

一般情況下,在建立 HTTPS 連線的時候,客戶端會去檢查伺服器端的憑證。只有憑證合法的情況下才繼續連線。

客戶端會有一個憑證列表,該憑證要在列表裡面才會繼續連線。

這是為什麼,在建立 mitmproxy 的撈封包環境之前,需要把字簽憑證加進列表裡面,為的是讓客戶端願意和我們建立 HTTPS 連線。

SSL Pinning

SSL Pinning 的機制在於,客戶端永遠只會相信一組憑證。

比方說客戶端程式是用來跟 A 網站連線的,而 A 網站的憑證是 B,那麼 SSL Pinning 就是負責把 B Pinning 起來。

當今天的連線加入一個中間人,客戶端就可以藉由憑證發現連線的節點不是一對一的,因此就放棄連線。

客戶端程式擁有自己的憑證列表

以 PC 的環境來說,一般情況下,程式相信的憑證列表就是作業系統的憑證列表。

但這不代表客戶端程式不能有自己的憑證列表。舉例來說,瀏覽器就是一個例子。

而 mitmproxy 的官方文件也有教怎麼在常見的瀏覽器新增憑證,方法會和作業系統的新增方式不同。

SSL Pinning 對爬蟲的影響

如果在確定 mitmproxy 的憑證有正確設定好的情況下,就無法用中間人攻擊去劫持連線了。

個人案例分享

有一個 APP 叫麥當勞報報,該 APP 是有 root 偵測 和 SSL Pinning 保護的。

如果裝置有 root,APP 會完全無法使用。

當時我想對這個 APP 撈封包,首先我先對 APP 反編譯,找到偵測 root 的函式,讓它永遠回傳 false。

另外打破 SSL Pinning 的方法,我是在 GitHub 上找到現成的工具 apk-mitm 直接使用的。

實際上,要將反編譯且修改後的程式碼,重新打包回 APK 的時候,有蠻複雜的簽署 APK 流程。

不過 apk-mitm 會幫忙處理好簽署 APK 的流程,有點一舉兩得的感覺。

參考文章


上一篇
Day 13 比較 mitmproxy、Wireshark、Fiddler 與 Charles
下一篇
Day 15 番外篇 !! 我與麥當勞報報的愛恨情仇
系列文
mitmproxy 在網路爬蟲上的各種應用18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言